home *** CD-ROM | disk | FTP | other *** search
/ Programmer Power Tools / Programmer Power Tools.iso / clipper / code_1.arc / TEM_MNTC.PRG < prev    next >
Text File  |  1989-01-03  |  12KB  |  376 lines

  1. * ________.PRG
  2. * ________________________________ FILE MAINTENANCE by _________________
  3. *     created: __/__/__
  4. * last update: __/__/__
  5. *
  6. ****************************************************
  7. * NOTE:  All procedures called in this program are *
  8. *        at the bottom of this program.            *
  9. *                                                  *
  10. *        All UDFs (usually prefixed with c_) are   *
  11. *        located in the TEM_UDFS.PRG program file. *
  12. ****************************************************
  13. *
  14. *****************************************
  15. * HELP key Initialization (if required) *
  16. *****************************************
  17. * SET KEY 28 TO MNTCHELP
  18. *
  19. ********************************************
  20. * MESSAGE line intialization (if required) *
  21. ********************************************
  22. * SET MESSAGE TO 2
  23. *
  24. ****************************
  25. * Open required data files *
  26. ****************************
  27.  
  28.  
  29. *
  30. ***************************************************
  31. * Establish Relations between files (if required) *
  32. ***************************************************
  33.  
  34.  
  35.  
  36. *
  37. **************************************************
  38. * Create memory variables to be accessed by the  *
  39. * UDFs c_MEMEMPTY(), c_SCATTER(), c_GATHER() and *
  40. * c_BLANK().                                     *
  41. **************************************************
  42. FOR memctr  = 1 TO FCOUNT()
  43.     memvar  = "M"+FIELDNAME(memctr)
  44.    &memvar. = .T.
  45. NEXT
  46.  
  47. *
  48. **********************
  49. * Display the screen *
  50. **********************
  51. CLEAR
  52. morder="________"                        &&  Master Index Order (if applicable)
  53. @ __,__ GET morder
  54. CLEAR GETS
  55.  
  56. * @ 03,00 SAY REPLICATE(CHR(196),79)      &&  Single Top Border Line ala LOTUS
  57. * @ 23,00 SAY REPLICATE(CHR(196),79)      &&  Block Bottom Border Line ala LOTUS
  58.  
  59.  
  60. *
  61.  
  62. **********************
  63. * Display the record *
  64. **********************
  65. mrecno=RECNO()               && Mark position in file
  66. DO ____DISP
  67. *
  68. DO WHILE .T.
  69.    *
  70.    c_MTC_MENU(1,00)          && UDF to display Maintenance Menu (see TEM_UDFS.PRG)
  71.    *
  72.    DO CASE
  73.       CASE mmopt=0
  74.          EXIT
  75.          *
  76.       CASE mmopt=1
  77.          ****************
  78.          * ADD a record *
  79.          ****************
  80.          SET CURSOR ON
  81.          DO WHILE .T.
  82.             c_MEMEMPTY()     && Initialize memory variables UDF
  83.  
  84.             DO ____GETS                && GET routine to clear variables on screen
  85.             CLEAR GETS
  86.             @ 24,40-(LEN(mmsg)/2) SAY mmsg
  87.             *
  88.             ********************
  89.             * Get KEY field(s) *
  90.             ********************
  91.             @ __,__ GET ________
  92.  
  93.             READ
  94.             CLEAR GETS
  95.             IF LASTKEY()=27 .OR. EMPTY(________)
  96.                **************************************************
  97.                * ESCape was pressed or no input on key field(s) *
  98.                **************************************************
  99.                IF RECCOUNT()<>0
  100.                   GOTO mrecno          &&  Reset record pointer
  101.                ENDIF
  102.                EXIT
  103.             ENDIF
  104.             mskey=________             &&  Initialize key variable (if multiple keys)
  105.             SEEK mskey
  106.             IF .NOT. EOF()
  107.                * Record already exists
  108.                EXIT
  109.             ENDIF
  110.             mmsg="Enter all required information or press ESCape when finished"
  111.             @ 24,0
  112.             @ 24,40-(LEN(mmsg)/2) SAY mmsg
  113.             *
  114.  
  115.             DO ____GETS                && GET routine to input variables
  116.             READ
  117.             CLEAR GETS
  118.             *
  119.             IF LASTKEY()<>27
  120.                ******************************************
  121.                * Continue if ESCape key was not pressed *
  122.                ******************************************
  123.                mreply="Y"
  124.                @ 24,0
  125.                @ 24,26 SAY "OKAY TO ADD RECORD (Y/N)?" GET mreply PICTURE "!" VALID(mreply$"YN")
  126.                READ
  127.                @ 24,0
  128.                IF mreply="Y"
  129.                   SEEK c_BLANK(________)     && Seek empty record (c_BLANK() is a UDF in system module)
  130.                   IF EOF()
  131.                      APPEND BLANK
  132.                   ENDIF
  133.                   ***********************************************************
  134.                   * Update fields with memory variables through REPLACE UDF *
  135.                   ***********************************************************
  136.                   c_GATHER()
  137.                   *
  138.                   mrecno=RECNO()            && Update record pointer
  139.                ELSE
  140.                   IF RECCOUNT()<>0
  141.                      GOTO mrecno            && Reposition record pointer
  142.                   ENDIF
  143.                ENDIF
  144.             ENDIF lastkey()<>27
  145.          ENDDO .t. (main ADD control loop)
  146.          *
  147.       CASE mmopt=2
  148.          *******************
  149.          * DELETE a record *
  150.          *******************
  151.          SET CURSOR ON
  152.          mreply="N"
  153.          @ 24,10 SAY "DELETE THIS RECORD (Y/N)?" GET mreply PICTURE "!" VALID(mreply$"YN")
  154.          READ
  155.          IF mreply="Y"
  156.             mreply="N"
  157.             @ 24,47 SAY "ARE YOU SURE (Y/N)?" GET mreply PICTURE "!" VALID(mreply$"YN")
  158.             READ
  159.             IF mreply="Y"
  160.                c_DATAGONE()                 && Replace fields with empty values UDF
  161.                GO TOP                       && Reposition record pointer
  162.             ENDIF
  163.          ENDIF
  164.          *
  165.       CASE mmopt=3
  166.          *****************
  167.          * EDIT a record *
  168.          *****************
  169.          SET CURSOR ON
  170.          *
  171.          c_SCATTER()         && Load memory variables with field values
  172.          *
  173.          mmsg="Enter changes or press ESCape when finished"
  174.          @ 24,0
  175.          @ 24,40-(LEN(mmsg)/2) SAY mmsg
  176.          *
  177.          DO ____GETS                   && GET routine to input variables
  178.          READ
  179.          CLEAR GETS
  180.          IF LASTKEY()<>27
  181.             **********************************************************
  182.             * If operator did not ESCape out of EDIT, perform memory *
  183.             * variables-to-fields UDF.                               *
  184.             **********************************************************
  185.             c_GATHER()
  186.          ENDIF
  187.          *
  188.       CASE mmopt=4
  189.          *********************
  190.          * GO to TOP of file *
  191.          *********************
  192.          GO TOP
  193.          *
  194.       CASE mmopt=5
  195.          *********************************************************
  196.          * GOTO SPECIFIED record. This routine uses system UDFs. *
  197.          *********************************************************
  198.          SET CURSOR ON
  199.          mscreen=SPACE(4000)
  200.          ****************************************
  201.          * Save the INDEX order (if applicable) *
  202.          ****************************************
  203.          mindex=INDEXORD()                       && Save the index order
  204.          SAVE SCREEN TO mscreen                  && Save the screen
  205.          c_BOXIT(18,13,23,65,1,c_goto_box)       && Save the whales (oops!)
  206.          c_SAYIT(19,16,"Consignee ID ........",c_goto_box)
  207.          c_SAYIT(20,16,"Name ................",c_goto_box)
  208.          c_SAYIT(22,16,"Enter Values for Search or ESCape when finished",c_goto_box)
  209.          *
  210.          DO WHILE .T.
  211.             *************************************
  212.             * Initialize key memory variable(s) *
  213.             *************************************
  214.  
  215.  
  216.             ******************************
  217.             * GET key memory variable(s) *
  218.             ******************************
  219.  
  220.  
  221.             READ
  222.             CLEAR GETS
  223.             *
  224.             IF LASTKEY()=27 .OR. EMPTY(________)
  225.                **************************************************
  226.                * ESCape was pressed or no input on key field(s) *
  227.                **************************************************
  228.                IF RECCOUNT()<>0
  229.                   GOTO mrecno          &&  Reset record pointer
  230.                ENDIF
  231.                SET ORDER TO mindex     &&  Reset master index
  232.                EXIT
  233.             ENDIF
  234.             *
  235.             mskey=________             &&  Initialize key variable (if multiple keys)
  236.             SEEK mskey
  237.             IF EOF()
  238.                mmsg="RECORD NOT FOUND - PRESS ANY KEY TO CONTINUE"
  239.                ?? CHR(7)
  240.                @ 24,0
  241.                @ 24,40-(LEN(mmsg)/2) SAY mmsg
  242.                SET CONSOLE OFF
  243.                WAIT
  244.                SET CONSOLE ON
  245.                @ 24,0
  246.             ELSE
  247.                EXIT
  248.             ENDIF
  249.          ENDDO
  250.          SET CURSOR OFF
  251.          RESTORE SCREEN FROM mscreen
  252.          RELEASE mscreen
  253.          **************************************
  254.          * Display sort order (if applicable) *
  255.          **************************************
  256.          DO CASE
  257.             CASE INDEXORD()=1
  258.                morder="__________"
  259.             CASE INDEXORD()=2
  260.                morder="__________"
  261.                *
  262.                *
  263.                *
  264.          ENDCASE
  265.          @ __,__ GET morder
  266.          CLEAR GETS
  267.          *
  268.       CASE mmopt=6
  269.          **************************
  270.          * Print displayed record *
  271.          **************************
  272.          IF ISPRINTER()
  273.             mwork=" PAGE HEADING "
  274.             SET DEVICE TO PRINT
  275.             SET MARGIN TO 10
  276.             @ 01,40-(LEN(mwork)/2) SAY mwork
  277.             @ PROW()+3,00 SAY ""
  278.  
  279.                  Remaining fields and headings
  280.  
  281.             EJECT
  282.             SET MARGIN TO
  283.             SET DEVICE TO SCREEN
  284.          ELSE
  285.             mmsg="PRINTER NOT READY - CORRECT AND PRESS ANY KEY TO CONTINUE"
  286.             ?? CHR(7)
  287.             @ 24,0
  288.             @ 24,40-(LEN(mmsg)/2) SAY mmsg
  289.             SET CONSOLE OFF
  290.             WAIT
  291.             SET CONSOLE ON
  292.          ENDIF
  293.          *
  294.       CASE mmopt=7
  295.          *********************
  296.          * GO to LAST record *
  297.          *********************
  298.          GO BOTTOM
  299.          *
  300.       CASE mmopt=8
  301.          *********************
  302.          * GO to NEXT record *
  303.          *********************
  304.          SKIP
  305.          IF EOF()
  306.             GOTO BOTTOM
  307.          ENDIF
  308.          *
  309.       CASE mmopt=9
  310.          *************************
  311.          * GO to PREVIOUS record *
  312.          *************************
  313.          SKIP -1
  314.          IF BOF()
  315.             GOTO TOP
  316.          ENDIF
  317.          *
  318.    ENDCASE
  319.    @ 24,00
  320.    **********************
  321.    * Display the record *
  322.    **********************
  323.    DO ____DISP
  324. ENDDO
  325. **************************
  326. * Housekeeping functions *
  327. **************************
  328. CLOSE DATABASES
  329. *
  330. * SET KEY 28 TO HELP                   &&  Reset help program (if applicable)
  331. * SET MESSAGE TO                       &&  Reset message line (if applicable)
  332. SET RELATION TO                        &&  Reset data relations (if applicable)
  333. RETURN
  334. *
  335. *
  336. *****************************************
  337. * Maintenance Program PROCEDURES follow *
  338. *****************************************
  339. *
  340. *
  341. PROCEDURE ____DISP
  342.    *
  343.    **************************
  344.    * Display current record *
  345.    **************************
  346.    *
  347.    DO WHILE EMPTY(________) .AND. .NOT. EOF()
  348.       * Find first non-blank record in file
  349.       SKIP
  350.    ENDDO
  351.    *
  352.    mrecno=RECNO()            &&  Mark position in file
  353.    *
  354.    ****************************************
  355.    * GET required data fields for display *
  356.    ****************************************
  357.  
  358.  
  359.    *
  360.    CLEAR GETS
  361. RETURN
  362. *
  363. *
  364. *
  365. PROCEDURE ____GETS
  366.    *
  367.    ********************************
  368.    * GET non-key memory variables *
  369.    ********************************
  370.  
  371.  
  372. RETURN
  373. *
  374. *
  375. *
  376.